/******************************************************************************

                  版权所有 - 杭州寰宇微视科技有限公司

 ******************************************************************************
  文 件 名   : an41908a_io.h
  版 本 号   : 初稿
  作    者   : zhangtao
  生成日期   : 2018年8月6日
  最近修改   :
  功能描述   :  
  函数列表   :
  修改历史   :
  1.日    期   : 2018年8月6日
    作    者   : zhangtao
    修改内容   : 创建文件

******************************************************************************/
#ifndef _H3C_AN41908A_IO_H_
#define _H3C_AN41908A_IO_H_

#ifndef __KERNEL__
#include <sys/ioctl.h>
#endif

#define AN41908A_IOC_MAGIC  'A'  ///< IOCTL magic for an41908a

#define AN41908A_GET_PARAMS             _IOR(AN41908A_IOC_MAGIC, 0x00, struct an41908a_ctrl_info *) ///< 获取an41908a芯片的lens和iris等控制信息
#define AN41908A_INIT_PARAMS            _IOW(AN41908A_IOC_MAGIC, 0x01, struct an41908a_ctrl_info *) ///< 初始化an41908a芯片的lens和iris等控制信息
#define AN41908A_LENS_MOVE              _IOW(AN41908A_IOC_MAGIC, 0x02, struct lens_run_stru *) ///< 设置an41908a lens移动的参数，控制zoom或focus执行相应动作
#define AN41908A_LENS_STOP              _IO(AN41908A_IOC_MAGIC, 0x03) ///< 控制电动镜头停止移动
#define AN41908A_IRIS_SET_PWM           _IOW(AN41908A_IOC_MAGIC, 0x04, unsigned short) ///< 设置an41908a iris pwm的值
#define AN41908A_IRIS_GET_HALL          _IOW(AN41908A_IOC_MAGIC, 0x05, unsigned short *) ///< 获取an41908a iris hall的值
#define AN41908A_PI_CTL                 _IOW(AN41908A_IOC_MAGIC, 0x06, int) ///< 控制an41908a的PI
#define AN41908A_REG_READ               _IOR(AN41908A_IOC_MAGIC, 0x07, struct an41908a_reg_info *) ///< 读取an41908a的寄存器 
#define AN41908A_REG_WRITE              _IOW(AN41908A_IOC_MAGIC, 0x08, struct an41908a_reg_info *) ///< 写入an41908a的寄存器 
#define AN41908A_GET_FPS                _IOW(AN41908A_IOC_MAGIC, 0x09, unsigned int *) ///< 获取an41908a vd频率, 单位: Hz, U23Q9模式
#define AN41908A_SET_FPS                _IOW(AN41908A_IOC_MAGIC, 0x0A, unsigned int) ///< 设置an41908a vd频率, 单位: Hz, U23Q9模式
#define AN41908A_GET_ZOOM_PI            _IOR(AN41908A_IOC_MAGIC, 0x0B, int *) ///< 读取ZOOM PI
#define AN41908A_GET_FOCUS_PI           _IOR(AN41908A_IOC_MAGIC, 0x0C, int *) ///< 读取FOCUS PI
#define AN41908A_GET_ICR                _IOR(AN41908A_IOC_MAGIC, 0x0D, int *) ///< 获取ICR状态
#define AN41908A_SET_ICR                _IOW(AN41908A_IOC_MAGIC, 0x0E, int) ///< 设置ICR状态
#define AN41908A_GET_PARAMS_AUX         _IOR(AN41908A_IOC_MAGIC, 0x0F, struct an41908a_ctrl_info *) ///< 获取an41908a芯片的lens和iris等控制信息
#define AN41908A_INIT_PARAMS_AUX        _IOW(AN41908A_IOC_MAGIC, 0x10, struct an41908a_ctrl_info *) ///< 初始化an41908a芯片的lens和iris等控制信息
#define AN41908A_LENS_MOVE_AUX          _IOW(AN41908A_IOC_MAGIC, 0x11, struct lens_run_stru *) ///< 设置an41908a lens移动的参数，控制zoom或focus执行相应动作
#define AN41908A_LENS_STOP_AUX          _IO(AN41908A_IOC_MAGIC, 0x12) ///< 控制电动镜头停止移动
#define AN41908A_IRIS_SET_PWM_AUX       _IOW(AN41908A_IOC_MAGIC, 0x13, unsigned short) ///< 设置an41908a iris pwm的值
#define AN41908A_IRIS_GET_HALL_AUX      _IOW(AN41908A_IOC_MAGIC, 0x14, unsigned short *) ///< 获取an41908a iris hall的值
#define AN41908A_PI_CTL_AUX             _IOW(AN41908A_IOC_MAGIC, 0x15, int) ///< 控制an41908a的PI
#define AN41908A_REG_READ_AUX           _IOR(AN41908A_IOC_MAGIC, 0x16, struct an41908a_reg_info *) ///< 读取an41908a的寄存器 
#define AN41908A_REG_WRITE_AUX          _IOW(AN41908A_IOC_MAGIC, 0x17, struct an41908a_reg_info *) ///< 写入an41908a的寄存器 
#define AN41908A_GET_FPS_AUX            _IOW(AN41908A_IOC_MAGIC, 0x18, unsigned int *) ///< 获取an41908a vd频率, 单位: Hz, U23Q9模式
#define AN41908A_SET_FPS_AUX            _IOW(AN41908A_IOC_MAGIC, 0x19, unsigned int) ///< 设置an41908a vd频率, 单位: Hz, U23Q9模式
#define AN41908A_GET_ZOOM_PI_AUX        _IOR(AN41908A_IOC_MAGIC, 0x1A, int *) ///< 读取ZOOM PI
#define AN41908A_GET_ICR_PI        		_IOR(AN41908A_IOC_MAGIC, 0x1A, int *) ///< 读取ICR PI
#define AN41908A_GET_FOCUS_PI_AUX       _IOR(AN41908A_IOC_MAGIC, 0x1B, int *) ///< 读取FOCUS PI
#define AN41908A_GET_ICR_AUX            _IOR(AN41908A_IOC_MAGIC, 0x1C, int *) ///< 获取ICR状态
#define AN41908A_SET_ICR_AUX            _IOW(AN41908A_IOC_MAGIC, 0x1D, int) ///< 设置ICR状态

#define AN41908A_TWO_LENS_MOVE          _IOW(AN41908A_IOC_MAGIC, 0x1E, struct lens_run_stru *) ///< 设置an41908a lens移动的参数，控制zoom或focus执行相应动作
#define AN41908A_TWO_LENS_STOP          _IO(AN41908A_IOC_MAGIC, 0x1F) ///< 控制电动镜头停止移动


#define XURI_ZOOMA_FOCUS_GET_PARAMS      AN41908A_GET_PARAMS
#define XURI_ZOOMA_FOCUS_INIT_PARAMS     AN41908A_INIT_PARAMS
#define XURI_ZOOMA_FOCUS_LENS_MOVE       AN41908A_LENS_MOVE
#define XURI_ZOOMA_FOCUS_LENS_STOP       AN41908A_LENS_STOP
#define XURI_ZOOMA_FOCUS_PI_CTL          AN41908A_PI_CTL  
#define XURI_ZOOMA_FOCUS_REG_READ        AN41908A_REG_READ
#define XURI_ZOOMA_FOCUS_REG_WRITE       AN41908A_REG_WRITE
#define XURI_GET_FPS                     AN41908A_GET_FPS   
#define XURI_SET_FPS                     AN41908A_SET_FPS
#define XURI_GET_ZOOMA_PI                AN41908A_GET_ZOOM_PI
#define XURI_GET_FOCUS_PI                AN41908A_GET_FOCUS_PI
#define XURI_GET_ZOOMB_PI                AN41908A_GET_ZOOM_PI_AUX
#define XURI_GET_IRIS_PI                 AN41908A_GET_FOCUS_PI_AUX
#define XURI_GET_IRCUT_PI                AN41908A_GET_ICR_PI
#define XURI_GET_ICR                     AN41908A_GET_ICR  
#define XURI_SET_ICR                     AN41908A_SET_ICR
#define XURI_ZOOMB_IRIS_GET_PARAMS       AN41908A_GET_PARAMS_AUX
#define XURI_ZOOMB_IRIS_INIT_PARAMS      AN41908A_INIT_PARAMS_AUX 
#define XURI_ZOOMB_IRIS_LENS_MOVE        AN41908A_LENS_MOVE_AUX   
#define XURI_ZOOMB_IRIS_LENS_STOP        AN41908A_LENS_STOP_AUX   
#define XURI_ZOOMB_IRIS_REG_READ_AUX     AN41908A_REG_READ_AUX
#define XURI_ZOOMB_IRIS_REG_WRITE_AUX    AN41908A_REG_READ_AUX


struct lens_ctrl_para {
	unsigned short dt1_time_and_chopfre;        ///< 20H
	unsigned short test_choose;                 ///< 21H

	unsigned short dt2a_time_and_phasecorrect;  ///< 22H
	unsigned short ab_current;                  ///< 23H
	unsigned short ab_step_cnt_dirdiv_sw;       ///< 24H
	unsigned short ab_step_cycle;               ///< 25H
	
	unsigned short dt2b_time_and_phasecorrect;  ///< 27H
	unsigned short cd_current;                  ///< 28H
	unsigned short cd_step_cnt_dirdiv_sw;       ///< 29H
	unsigned short cd_step_cycle;               ///< 2AH
};

struct iris_ctrl_para {
	unsigned short iris_tgt;                    ///< 00H

	unsigned short cutoff_fre_pidsw;            ///< 01H

	unsigned short pid_zero_pole;               ///< 02H
	unsigned short lpf;                         ///< 03H
	unsigned short hall_bias_offset;            ///< 04H
	unsigned short hall_gain;                   ///< 05H
	
	unsigned short pulse1_start_time;           ///< 06H
	unsigned short pulse1_width_en;             ///< 07H
	unsigned short pulse2_start_time;           ///< 08H
	unsigned short pulse2_width_en;             ///< 09H
	unsigned short tgt_in_duty_test;            ///< 0Ah
	unsigned short test_mode_polarity;          ///< 0BH
	unsigned short iris_adc;                    ///< 0CH
	unsigned short tgt_update_and_speed;        ///< 0EH
};

struct lens_run_stru {
	int zoom_dir;                               ///< zoom移动的方向
	int focus_dir;                              ///< focus的聚焦方向
	unsigned char zoom_step;                    ///< zoom 电机移动的步数
	unsigned char focus_step;                   ///< focus电机移动的步数
	unsigned char reserved[2];                  ///< reserved
};

struct an41908a_ctrl_info {
	unsigned int step_cyc;                    
	struct lens_ctrl_para lens_info;           
	struct iris_ctrl_para iris_info;            
};

struct an41908a_reg_info {
	unsigned char addr;                         
	unsigned char res[1];                       ///< reserved
	unsigned short data;                        ///< 数据
};

#endif 


